// ES5以及之前给参数默认值
// 缺点： 写起来麻烦，并且代码有bug，比如传入0和空字符串
// function foo(m, n) {
//   m = m || "aaa";
//   n = n || "bbb";

//   console.log(m, n);
// }

// // foo();
// foo(0, "");

function foo(m = "aaa", n = "bbb") {
  console.log(m, n);
}

// foo();
foo(0, "");

// 对象参数和默认值以及解构
function printInfo({ name, age } = { name: "frank", age: 18 }) {
  console.log(name, age);
}
printInfo({ name: "kobe", age: 40 });

// 另外一种写法
function printInfo1({ name = "frank", age = 18 } = {}) {
  console.log(name, age);
}
printInfo1();

// 默认值的形参最好放到最后
function bar(x, y, z = 30) {
  console.log(x, y, z);
}

bar(10, 20);

// 有默认值的函数的length属性
function baz(x, y, m, n, z = 30) {
  console.log(x, y, z);
}
console.log(baz.length);
